/**
 * Ant Design Vue 反馈工具类，用于在前端应用程序中显示各种类型的用户反馈信息。
 */
import { message as antdMessage, Modal as antdModal, notification as antdNotification } from "ant-design-vue";

export class FeedbackUtils {
    /**
     * 单例模式的静态实例变量。
     */
    static instance: FeedbackUtils | null = null;

    /**
     * 获取 Feedback 类的单例实例。
     * @returns Feedback 类的单例实例。
     */
    static getInstance() {
        return this.instance ?? (this.instance = new FeedbackUtils());
    }

    /**
     * 显示普通消息提示。
     * @param msg - 消息内容。
     */
    msg(msg: string) {
        antdMessage.info(msg);
    }

    /**
     * 显示错误消息提示。
     * @param msg - 错误消息内容。
     */
    msgError(msg: string) {
        antdMessage.error(msg);
    }

    /**
     * 显示成功消息提示。
     * @param msg - 成功消息内容。
     */
    msgSuccess(msg: string) {
        antdMessage.success(msg);
    }

    /**
     * 显示警告消息提示。
     * @param msg - 警告消息内容。
     */
    msgWarning(msg: string) {
        antdMessage.warning(msg);
    }

    /**
     * 显示普通弹出提示框。
     * @param msg - 提示内容。
     */
    alert(msg: string) {
        antdModal.info({
            title: "系统提示",
            content: msg
        });
    }

    /**
     * 显示错误弹出提示框。
     * @param msg - 错误提示内容。
     */
    alertError(msg: string) {
        antdModal.error({
            title: "系统提示",
            content: msg
        });
    }

    /**
     * 显示成功弹出提示框。
     * @param msg - 成功提示内容。
     */
    alertSuccess(msg: string) {
        antdModal.success({
            title: "系统提示",
            content: msg
        });
    }

    /**
     * 显示警告弹出提示框。
     * @param msg - 警告提示内容。
     */
    alertWarning(msg: string) {
        antdModal.warning({
            title: "系统提示",
            content: msg
        });
    }

    /**
     * 显示普通通知提示。
     * @param msg - 通知内容。
     */
    notify(msg: string) {
        antdNotification.info({
            message: "系统通知",
            description: msg
        });
    }

    /**
     * 显示错误通知提示。
     * @param msg - 错误通知内容。
     */
    notifyError(msg: string) {
        antdNotification.error({
            message: "系统通知",
            description: msg
        });
    }

    /**
     * 显示成功通知提示。
     * @param msg - 成功通知内容。
     */
    notifySuccess(msg: string) {
        antdNotification.success({
            message: "系统通知",
            description: msg
        });
    }

    /**
     * 显示警告通知提示。
     * @param msg - 警告通知内容。
     */
    notifyWarning(msg: string) {
        antdNotification.warning({
            message: "系统通知",
            description: msg
        });
    }

    /**
     * 显示确认对话框。
     * @param msg - 确认内容。
     * @returns Promise，解析为用户的选择（确认或取消）。
     */
    confirm(msg: string): Promise<void> {
        return new Promise((resolve, reject) => {
            antdModal.confirm({
                title: "温馨提示",
                content: msg,
                okText: "确定",
                cancelText: "取消",
                onOk() {
                    resolve();
                },
                onCancel() {
                    reject();
                }
            });
        });
    }
}

/**
 * Feedback 类的单例实例。
 */
export const Feedback = FeedbackUtils.getInstance();
